package day06;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 将emp.dat文件中所有员工解析出来，并创建为若干Emp实例存入一个
 * 集合，然后输出该集合中每个员工信息。
 * 该文件800字节，每80个字节为一个员工的信息。
 * 其中:
 * 	 name为字符串，长度为32个字节，编码为:UTF-8
 *   age为int,长度为4个字节
 * 	 gender为字符串，长度为10个字节，编码为:UTF-8
 * 	 salary为int,长度为4个字节
 * 	 hiredate为字符串，格式"yyyy-MM-dd"，长度为30个字节，编码为:UTF-8
 * 格式可参考当前包中emp.jpg图
 * 提示:
 * 使用RandomAccessFile读取字符串时，例如name,可以先读取32个字节，再按照UTF-8
 * 转换为字符串，读取age时可以直接使用readInt方法。依次类推。
 * @author Bonnie
 *
 */
public class Test13 {
	public static void main(String[] args) throws URISyntaxException, IOException {
		File file = new File("Home_Work/src/day06/emp.dat");
		List<Emp> empList = new ArrayList<>();
		try (RandomAccessFile raf = new RandomAccessFile(file, "r")) {
			byte[] nameBytes = new byte[32];
			byte[] genderBytes = new byte[10];
			byte[] hiredateBytes = new byte[30];
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

			while (raf.getFilePointer() < raf.length()) {
				raf.read(nameBytes);
				String name = new String(nameBytes, StandardCharsets.UTF_8).trim();

				int age = raf.readInt();

				raf.read(genderBytes);
				String gender = new String(genderBytes, StandardCharsets.UTF_8).trim();

				int salary = raf.readInt();

				raf.read(hiredateBytes);
				String hiredateStr = new String(hiredateBytes, StandardCharsets.UTF_8).trim();
				Date hiredate = sdf.parse(hiredateStr);

				empList.add(new Emp(name, age, gender, salary, hiredate));
			}
		} catch (IOException | ParseException e) {
			e.printStackTrace();
		}

		for (Emp emp : empList) {
			System.out.println(emp);
		}
	}
}
